/**
 * 1658. 将 x 减到 0 的最小操作数
    正难则反
    直接找数组区间内，有没有 sum[nums] - x 的最长连续区间即可
 */ 
class Solution4 {
    public int minOperations(int[] nums, int x) {
        int sum = 0, n = nums.length;
        // 求数组之和
        for(int i = 0; i < n; i++) sum += nums[i];
        // 寻找的目标值
        int target = sum - x;
        if(target < 0) return -1;
        int count = Integer.MIN_VALUE, tmp = 0;
        for(int left = 0, right = 0; right < n; right++) {
            // 进窗口
            tmp += nums[right];

            // 判断
            while(tmp > target) {
                // 出窗口
                tmp -= nums[left];
                left++;
            }

            if(tmp == target) {
                // 更新最长连续区间的个数
                count = Math.max(count, right - left + 1);
            }
        }

        return count == Integer.MIN_VALUE ? -1 : n - count;
    }
}